package org.ccay.manage.sitemap.service;

import java.util.List;

import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;

import org.ccay.core.base.BatchVO;
import org.ccay.core.base.PageVO;
import org.ccay.core.base.PagedResult;
import org.ccay.core.exception.ApplicationException;
import org.ccay.security.annotation.SecurityBindingURL;
import org.ccay.security.annotation.SecurityOperation;
import org.ccay.security.annotation.SecurityResource;
import org.ccay.sitemap.SiteNodeSimpleVO;
import org.ccay.sitemap.SiteNodeVO;

/**
 * SiteMap 服务接口，供后台使用
 */
@Path("")
@Produces("application/json")
@SecurityResource(code="siteMapManagement",name="系统管理|栏目管理",desc="管理栏目菜单")
public interface ISiteMapManageService {
	
	@SecurityOperation(code="page",name="页面权限")
	@SecurityBindingURL("manage/sitemap/listSiteMap.html")
	String siteMapManagement = "SITEMAP_MANAGEMENT";
	/**
	 * 创建栏目节点
	 * 
	 * @param siteNodeVO
	 * @throws ApplicationException
	 */
	@POST
	@Path("/single")
	@SecurityOperation(code="create",name="创建栏目")
	void createSiteNode(SiteNodeVO siteNodeVO) 	throws ApplicationException;

	/**
	 * 更新栏目节点
	 * 
	 * @param siteNodeVO
	 * @throws ApplicationException
	 */
	@PUT
	@Path("/single")
	@SecurityOperation(code="update",name="修改栏目")
	void updateSiteNode(SiteNodeVO siteNodeVO)	throws ApplicationException;

	/**
	 * 批量更新栏目节点
	 * 
	 * @param siteNodeVOs
	 * @throws ApplicationException
	 */
	@PUT
	@Path("/batch")
	@SecurityOperation(code="update",name="修改栏目")
	void updateSiteNodeList(List<SiteNodeVO> siteNodeVOs) throws ApplicationException;

	/**
	 * 删除栏目节点信息（包括数据的逻辑删除、物理删除及业务细信息删除） 业务信息删除例如：当权限被删除后，需要删除权限与节点的逻辑关系
	 * 
	 * @param siteNodeVO
	 * @throws ApplicationException
	 */
	@DELETE
	@Path("/single/delete")
	@SecurityOperation(code="delete",name="删除栏目")
	void deleteSiteNode(@QueryParam("") SiteNodeVO siteNodeVO) 	throws ApplicationException;

 
	/** 
	 * 查询单个栏目节点	
	 * @param siteNodeVO
	 * @return
	 * @throws ApplicationException
	 */
	@GET
	@Path("/single/{siteNodeId}")
	SiteNodeVO findSiteNode(@PathParam("") SiteNodeVO siteNodeVO) throws ApplicationException;
 
	/**
	 * 获取完整（无权限过滤）的导航菜单栏
	 * @param viewName 视图名
	 * @return
	 * @throws ApplicationException
	 */
	@GET
	@Path("/all/tree")
	SiteNodeVO findWholeSiteMap() throws ApplicationException;

	/**
	 * 获取角色（按角色权限过滤）的导航菜单栏
	 * 
	 * @return
	 */
	@GET
	@Path("/authorized/tree")
	SiteNodeSimpleVO findAuthorizedSiteMap() throws ApplicationException;
	
	/**
	 * 批量删除节点
	 * @param siteNodeVOs
	 * @throws ApplicationException
	 */
	@PUT
	@Path("/batch")
	@SecurityOperation(code="delete",name="删除栏目")
	void deleteSiteNodeList(List<SiteNodeVO> siteNodeVOs)
			throws ApplicationException;


	
	/**
	 * 根据父节点ID获取导航菜单栏	
	 * @param parentId 父节点ID
	 * @return 
	 * @throws ApplicationException
	 */
	SiteNodeVO findOneSiteMap(String parentId) throws ApplicationException;
	
	/** 
	 * 栏目批量导入
	 * @param List<SiteNodeVO>
	 * @return
	 * @throws ApplicationException
	 */
	@SecurityOperation(code="import",name="导入栏目")
	void importSiteNode(List<SiteNodeVO> siteNodeList) throws ApplicationException;
	/**
	 * listSiteMap页面
	 * 栏目批量导出
	 * 
	 * @author chaowangbang
	 * @throws ApplicationException 
	 * @since 2012-06-07
	 */
	@GET
	@Path("/list/export")
	@SecurityOperation(code="export",name="导出栏目")
	void exportClassifyByIExcel(@QueryParam("") SiteNodeVO querySiteNode) throws ApplicationException;
	
	/**
	 * 查找SiteNode 
	 * @param querySiteNode
	 * @param pageVO
	 * @return
	 * @throws ApplicationException 
	 */
	@GET
	@Path("/list/page/{pageSize}/{curPage}")
	PagedResult<SiteNodeVO> findPageSiteNodeList(@QueryParam("") SiteNodeVO querySiteNode,
			@PathParam("") PageVO pageVO) throws ApplicationException;
	
	/**
	 * 查找单个栏目节点是否存在
	 * @param siteNodeVO
	 * @return
	 */
	int findCountSiteNode(SiteNodeVO siteNodeVO);
	
	/**
	  * 批量添加栏目节点
	 * 
	 * @param siteNodeVOs
	 * @throws ApplicationException
	 */
	@POST
	@Path("/batch")
	@SecurityOperation(code="create",name="创建栏目")
	void createSiteNodeList(List<SiteNodeVO> siteNodeVOs) throws ApplicationException;
	
	/**
	  * 查找所有SiteNode 
	 * @param siteNodeVO
	 * @return
	 * @throws ApplicationException 
	 */
	@GET
	@Path("/list/all")
	List<SiteNodeVO> findAllSiteNodes(@QueryParam("") SiteNodeVO siteNodeVO) throws ApplicationException;
	
	/**
	 * 批量操作所有节点
	 * @author chaowangbang
	 * @since 2013-1-5
	 * @param batchItems
	 * @return
	 */
	@PUT
	@Path("/batch/save")
	void batchOperation(BatchVO<SiteNodeVO> batchItems) throws ApplicationException;
	
	/**
	  * 延时加载SiteNode 
	 * @author chaowangbang
	 * @since 2013-1-15
	 * @param siteNodeVO
	 * @return
	 * @throws ApplicationException 
	 */
	@GET
	@Path("/tree/list")
	List<SiteNodeVO> findSiteNodeTreeList(@QueryParam("") SiteNodeVO siteNodeVO) throws ApplicationException;
}
